package com.kobeliu.entity;

/**
 * leetCode 1446
 *
 * 简单题
 * 给你一个字符串 s ，字符串的「能量」定义为：只包含一种字符的最长非空子字符串的长度。
 *
 * 请你返回字符串的能量。
 *
 *
 *
 * 示例 1：
 *
 * 输入：s = "leetcode"
 * 输出：2
 * 解释：子字符串 "ee" 长度为 2 ，只包含字符 'e' 。
 *
 * 示例 2：
 *
 * 输入：s = "abbcccddddeeeeedcba"
 * 输出：5
 * 解释：子字符串 "eeeee" 长度为 5 ，只包含字符 'e' 。
 */

public class Demo_61_No1446 {

    public static void main(String[] args) {


    }

    /**
     * 指针法 空间复杂度 0（1） 时间复杂度 o（n）
     * @param s
     * @return
     */
    public int maxPower(String s) {

        int len = s.length();
        int max = 1;
        int l = 1;
        for(int i = 0;i<len-1;i++){
            if(s.charAt(i)!=s.charAt(i+1)){
                l=1;
            }
            while(i<len-1 && s.charAt(i)==s.charAt(i+1)){
                l++;
                i++;
            }
            max = Math.max(l,max);
            l = 1;
        }
        return max;
    }

    /**
     * dp法 时间复杂度O(n) 空间复杂度O(n)
     * @param s
     * @return
     */
    public int maxPower1(String s) {

        int len = s.length();
        int[] dp = new int[len];
        int max = 1;
        int i = 1;
        char pre = s.charAt(0);
        char next;
        dp[0] = 1;

        while(i<len){
            next = s.charAt(i);
            if(pre == next){
                dp[i] = dp[i-1]+1;
            }else{
                dp[i] = 1;
            }
            pre = next;
            max = Math.max(max,dp[i]);
            i++;
        }
        return max;
    }
}
